class Solution {
    public int totalFruit(int[] fruits) {
        int len =fruits.length;
        //[1篮子数值（果子类别），2篮子数值（类别），
        // 1篮子果子个数，2篮子果子个数，
        // 从1篮子取得最后一个果子坐标，2篮子最后一个果子坐标】
        int[] basket = new int[]{-1,-1,0,0,0,0};

        //0:最后放的第1篮子，，1：放第2篮子
        int fag=0;
        int n = 0; //计数 = 1篮子+2篮子

        int j;
        for (j = 0; j < len; j++) {

            if(basket[0] == -1){ //1篮子初始拿第一个
                basket[0] = fruits[j];
                basket[2] = basket[2] + 1;
                basket[4] = j;
                fag = 0;
                continue;
            }
            if(basket[1] == -1 && basket[0] != fruits[j]){ //2篮子初始拿第一个
                basket[1] = fruits[j];
                basket[3] = basket[3] + 1;
                basket[5] = j;
                fag = 1;
                continue;
            }

            if (fruits[j] == basket[0]){ //新的果子刚好是1篮子里的果子类别
                basket[2] = basket[2] + 1;
                basket[4] = j;
                fag = 0;
            }else if (fruits[j] == basket[1]){ //新的果子刚好是2篮子里的果子类别
                basket[3] = basket[3] + 1;
                basket[5] = j;
                fag = 1;
            }else {
                //出现第三个新的果子类
                n = basket[2]+basket[3] > n ? basket[2]+basket[3] : n;
                if(fag == 1) {
                    basket[3] = j -basket[4] - 1;//更新另一个篮子里数量

                    basket[0] = fruits[j];
                    basket[2] = 1;
                    basket[4] = j;
                    fag = 0;
                }
                else{
                    basket[2] = j - basket[5] - 1;

                    basket[1] = fruits[j];
                    basket[3] = 1;
                    basket[5] = j;
                    fag = 1;
                }
            }
        }
        return basket[2]+basket[3] > n ? basket[2]+basket[3] : n;
    }

}